// Copyright (C) joyinter
// All rights reserved.
// 
// Author : Jiang Li
// Date   : 2004-11-15

#include "stdafx.h"
#include "svr_showinfo.h"

namespace JoyServer
{

static const UINT JOYMSG_QUEUE_TEXT = WM_USER+0x33;

class CJoyMsgWndShowInfoExec : public CJoyMsgWndExec
{
public:
    CJoyShowInfo* m_showInfo;
    CString     m_text;
    COLORREF    m_color;

    void Execute()
    {
        m_showInfo->OnShowText(m_text, m_color);
    }
    CJoyMsgWndShowInfoExec(CJoyShowInfo* pShowInfo, const CString& text, COLORREF c):
        m_showInfo(pShowInfo), m_text(text), m_color(c)
    {
    }
};

// class CJoyShowInfo

CJoyShowInfo::CJoyShowInfo()
{
    m_defColor  = InfoColor_Default;
    m_logLevel  = InfoLog_Normal;
}

CJoyShowInfo::~CJoyShowInfo()
{
}

bool CJoyShowInfo::Create()
{
    if(!m_showInfoWnd.Create())
    {
        return false;
    }
    return true;
}

void CJoyShowInfo::Destroy()
{
    m_showInfoWnd.Destroy();
}

void CJoyShowInfo::OnShowText(const CString& text, COLORREF c)
{
    text;c;
}

void CJoyShowInfo::AddText(PCSTR pszText, COLORREF c)
{
    CJoyMsgWndShowInfoExec* pExec = 
        new CJoyMsgWndShowInfoExec(this, pszText, c);
    m_showInfoWnd.PostExec(pExec);
}

void CJoyShowInfo::QueueColorTextV(COLORREF c, PCSTR pszText, va_list args)
{
    char szBuf[1024];
    vsprintf(szBuf, pszText, args);
    AddText(pszText, c);
}

void CJoyShowInfo::QueueColorText(COLORREF c, PCSTR pszText, ...)
{
    va_list args;
    va_start(args, pszText);
    QueueColorTextV(c, pszText, args);
}

void CJoyShowInfo::QueueTimeColorTextV(COLORREF c, PCSTR pszText, va_list args)
{
    char szBuf[1024];
    SYSTEMTIME t;
    GetLocalTime(&t);    
    sprintf(szBuf, "[%.4d-%.2d-%.2d %.2d:%.2d:%.2d]",
        t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond);

    char* pszBuf = szBuf+strlen(szBuf);
    vsprintf(pszBuf, pszText, args);

    AddText(szBuf, c);
}

void CJoyShowInfo::QueueTimeColorText(COLORREF c, PCSTR pszText, ...)
{
    va_list args;
    va_start(args, pszText);
    QueueTimeColorTextV(c, pszText, args);
}

void CJoyShowInfo::QueueLog(int nLevel, COLORREF c, PCSTR pszText, va_list args)
{
    if(nLevel > m_logLevel)
    {
        return;
    }
    QueueTimeColorTextV(c, pszText, args);
}

void CJoyShowInfo::QueueLog(int nLevel, COLORREF c, PCSTR pszText, ...)
{
    if(nLevel > m_logLevel)
    {
        return;
    }
    va_list args;
    va_start(args, pszText);
    QueueTimeColorTextV(c, pszText, args);
}

void CJoyShowInfo::QueueTextV(PCSTR pszText, va_list args)
{
    QueueColorTextV(m_defColor, pszText, args);
}

void CJoyShowInfo::QueueText(PCSTR pszText, ...)
{
    va_list args;
    va_start(args, pszText);
    QueueTextV(pszText, args);
}

void CJoyShowInfo::QueueTimeTextV(PCSTR pszText, va_list args)
{
    QueueTimeColorTextV(m_defColor, pszText, args);
}

void CJoyShowInfo::QueueTimeText(PCSTR pszText, ...)
{
    va_list args;
    va_start(args, pszText);
    QueueTimeTextV(pszText, args);
}



} // namespace JoyServer